import { storage } from '@/config/index';

/**
 * 获取存储的数据
 * @param key 存储的键名
 * @returns 存储的值，如果不存在则返回 null
 */
export function getStorage(key: string): any {
  try {
    let value: string | null = null;
    
    if (storage === 'localStorage') {
      value = localStorage.getItem(key);
    } else if (storage === 'sessionStorage') {
      value = sessionStorage.getItem(key);
    } else {
      // 默认使用 localStorage
      value = localStorage.getItem(key);
    }
    
    if (value === null || value === undefined) {
      return null;
    }
    
    // 尝试解析 JSON，如果失败则返回原始字符串
    try {
      return JSON.parse(value);
    } catch {
      return value;
    }
  } catch (error) {
    console.error('获取存储数据失败:', error);
    return null;
  }
}

/**
 * 设置存储数据
 * @param key 存储的键名
 * @param value 要存储的值
 */
export function setStorage(key: string, value: any): void {
  try {
    const stringValue = typeof value === 'string' ? value : JSON.stringify(value);
    
    if (storage === 'localStorage') {
      localStorage.setItem(key, stringValue);
    } else if (storage === 'sessionStorage') {
      sessionStorage.setItem(key, stringValue);
    } else {
      // 默认使用 localStorage
      localStorage.setItem(key, stringValue);
    }
  } catch (error) {
    console.error('设置存储数据失败:', error);
  }
}

/**
 * 移除存储数据
 * @param key 存储的键名
 */
export function removeStorage(key: string): void {
  try {
    if (storage === 'localStorage') {
      localStorage.removeItem(key);
    } else if (storage === 'sessionStorage') {
      sessionStorage.removeItem(key);
    } else {
      // 默认使用 localStorage
      localStorage.removeItem(key);
    }
  } catch (error) {
    console.error('移除存储数据失败:', error);
  }
}

/**
 * 清空所有存储数据
 */
export function clearStorage(): void {
  try {
    if (storage === 'localStorage') {
      localStorage.clear();
    } else if (storage === 'sessionStorage') {
      sessionStorage.clear();
    } else {
      // 默认使用 localStorage
      localStorage.clear();
    }
  } catch (error) {
    console.error('清空存储数据失败:', error);
  }
} 